# 定义一个栈类
class Stack:
    def __init__(self):
        self.items = []  # 使用一个空列表来存储栈中的元素

    def push(self, item):
        """将元素压入栈"""
        self.items.append(item)  # 使用列表的 append 方法将元素添加到栈顶

    def pop(self):
        """弹出栈顶元素"""
        if not self.is_empty():  # 先检查栈是否为空
            return self.items.pop()  # 使用列表的 pop 方法弹出栈顶元素
        return None  # 如果栈为空，返回 None

    def is_empty(self):
        """检查栈是否为空"""
        return len(self.items) == 0  # 如果列表长度为 0，说明栈为空


def is_palindrome(s: str) -> bool:
    """
    使用栈检测字符串是否是回文
    """
    stack = Stack()  # 创建一个栈实例
    # 将字符串的每个字符压入栈
    for char in s:
        stack.push(char)  # 遍历字符串，逐个字符压入栈

    # 弹出栈中的字符，拼接成一个新的字符串
    reversed_s = ""  # 初始化一个空字符串，用于存储反转后的字符串
    while not stack.is_empty():  # 当栈不为空时
        reversed_s += stack.pop()  # 弹出栈顶字符并拼接到新字符串中

    # 比较原字符串和反转后的字符串
    return s == reversed_s  # 如果两者相同，说明原字符串是回文


# 测试用例
test_cases = ["level", "racecar", "hello", "madam", "world"]
for case in test_cases:
    print(f"'{case}' 是回文吗？ {is_palindrome(case)}")